/*
 *  $Id: DescriptorList.cs 1203 2010-11-22 18:41:11Z thenn.erannor $
 *	This file is a part of Ragima CCG.
 *	(C) 2008-2010 Ragima development group.
 *
 *	Licensed under the terms of the GNU GPL License version 2.
 *
 */

using System.Collections.Generic;

using Nereal.Extensions;
using Nereal.Serialization;

namespace Ragima.UI {
    /// <summary>
    /// Список описателей чего-либо, идентифицируемых по ID.
    /// </summary>
    [XmlRootName("descriptors")]
    public class DescriptorList<T> where T : class {
        private Dictionary<string, T> _dict;

        public DescriptorList() {
            _dict = new Dictionary<string, T>();
        }

        /// <summary>
        /// Словарь описателей.
        /// </summary>
        [XmlName(null, "descriptor"), KeyName("id")]
        public virtual Dictionary<string, T> Descriptors {
            get { return _dict; }
        }

        /// <summary>
        /// Получает массив идентификаторов описателей.
        /// </summary>
        public string[] GetDescriptors() {
            var keys = new string[_dict.Count];
            _dict.Keys.CopyTo(keys, 0);
            return keys;
        }

        /// <summary>
        /// Получает описатель по идентификатору.
        /// </summary>
        public T GetDescriptor(string id) {
            return _dict.GetOrDefault(id, null);
        }

        /// <summary>
        /// Добавляет описатель.
        /// </summary>
        public void AddDescriptor(string id, T descriptor) {
            _dict.Add(id, descriptor);
        }

        /// <summary>
        /// Удаляет описатель.
        /// </summary>
        public void RemoveDescriptor(string id) {
            if (_dict.ContainsKey(id))
                _dict.Remove(id);
        }
    }
}
